/** 
 *  @file
 *  @brief   PBARL 梁标准截面属性使用解析公式计算接口
 *  @author  wanghuan
 *  @date    2024.03.06
 *  @version v1.0
 *  @par Copyright(c):  ShenGong  Simulation corporation
 */

#pragma once
#include <memory>
#include "Utility/Algebra/Point.h"
#include "DataStructure/Common/SGNamespace.h"
#include "DataStructure/Common/Out.h"
#include "DataStructure/Input/Property/PBARLData.h"
#include "DataStructure/Input/Property/PBARData.h"

SG_NAMESPACE_OPEN
namespace FEMSolver {
namespace Element {

/** \class IBarSectionFormulaCalculator
 *  采用解析公式计算标准截面属性的基类
 */
class IBarSectionFormulaCalculator
{
public:
    virtual ~IBarSectionFormulaCalculator () = default;
    virtual void Compute
    (
    const SG::DataStructure::FEM::PBARLData& section,
    _OUT SG::DataStructure::FEM::PBARData&   property,
    _OUT SG::Algebra::Point&                 centroid
    ) const = 0;
};

using BarSectionFormulaCalculatorSP = std::shared_ptr<IBarSectionFormulaCalculator>;

}; // end namespace Element
}; // end namespace FEMSolver
SG_NAMESPACE_CLOSE